package com.yehebl.orm.data.common.dao;

import java.util.Map;

import com.yehebl.orm.data.common.dto.Page;
import com.yehebl.orm.data.common.xml.AQueryXmlSql;

/**
 * 查询分页的接口
 */
public interface IPageDao {

	/**
	 * 总条数自动生成sql
	 * 
	 * @param sqlName     xmlSqlName
	 * @param queryXmlSql 查询条件生成sql
	 * @param page        页码，从1开始
	 * @param size        查询条数
	 * @param clazz       返回类型
	 */
	<T> Page<T> findPageBySqlName(String sqlName, AQueryXmlSql queryXmlSql, int page, int size, Class<T> clazz);



	/**
	 * 总条数自动生成sql
	 *
	 * @param sqlName     xmlSqlName
	 * @param queryXmlSql 查询条件生成sql
	 * @param page        页码，从1开始
	 * @param size        查询条数
	 * @param clazz       返回类型
	 * @param pageType 分页类型 ：1:分页和数据一起返回,2:返回数据,3:返回分页
	 */
	<T> Page<T> findPageBySqlName(String sqlName, AQueryXmlSql queryXmlSql, int page, int size,Integer pageType, Class<T> clazz);

	/**
	 * 总条数自动生成sql
	 * 
	 * @param page  页码，从1开始
	 * @param size  查询条数
	 * @param clazz 返回类型
	 */
	<T> Page<T> findPageBySqlName(String sqlName, int page, int size, Class<T> clazz);

	/**
	 * 总条数自动生成sql
	 *
	 * @param page  页码，从1开始
	 * @param size  查询条数
	 * @param clazz 返回类型
	 * @param pageType 分页类型 ：1:分页和数据一起返回,2:返回数据,3:返回分页
	 */
	<T> Page<T> findPageBySqlName(String sqlName, int page, int size,Integer pageType, Class<T> clazz);


	/**
	 * sql查询返回分页
	 * 
	 * @param sql sql语句
	 * @param page 页码，从1开始
	 * @param size 查询条数
	 * @param objs 参数
	 * @param clazz 返回类型
	 */
	<T> Page<T> findPageBySql(String sql, int page, int size, Class<T> clazz, Object... objs);

	/**
	 * sql查询返回分页
	 *
	 * @param sql sql语句
	 * @param page 页码，从1开始
	 * @param size 查询条数
	 * @param objs 参数
	 * @param clazz 返回类型
	 */
	<T> Page<T> findPageBySql(String sql, int page, int size,Integer pageType, Class<T> clazz, Object... objs);

	/**
	 * 表达式查询返回分页
	 * 
	 * @param page  页码
	 * @param size  每页长度
	 * @param params 表达式查询
	 * @param clazz 返回类型
	 */
	<T> Page<T> findPageByMap(int page, int size, Map<String, Object> params, Class<T> clazz);

	/**
	 * 表达式查询返回分页
	 *
	 * @param page  页码
	 * @param size  每页长度
	 * @param params 表达式查询
	 * @param clazz 返回类型
	 */
	<T> Page<T> findPageByMap(int page, int size,Integer pageType, Map<String, Object> params, Class<T> clazz);


	/**
	 * sql查询返回分页
	 * 
	 * @param sql sql语句
	 * @param page 页码，从1开始
	 * @param size 查询条数
	 * @param objs 参数
	 */
	Page<Map<String, Object>> findMapPageBySql(String sql, int page, int size, Object... objs);

	/**
	 * sql查询返回分页
	 *
	 * @param sql sql语句
	 * @param page 页码，从1开始
	 * @param size 查询条数
	 * @param objs 参数
	 */
	Page<Map<String, Object>> findMapPageBySql(String sql,Integer pageType, int page, int size, Object... objs);



	/**
	 * 总条数自动生成sql
	 * 
	 * @param sqlName     xmlSqlName
	 * @param queryXmlSql 查询条件生成sql
	 * @param page        页码，从1开始
	 * @param size        查询条数
	 */
	Page<Map<String, Object>> findMapPageBySqlName(String sqlName, AQueryXmlSql queryXmlSql, int page, int size);

	/**
	 * 总条数自动生成sql
	 *
	 * @param sqlName     xmlSqlName
	 * @param queryXmlSql 查询条件生成sql
	 * @param page        页码，从1开始
	 * @param size        查询条数
	 */
	Page<Map<String, Object>> findMapPageBySqlName(String sqlName, AQueryXmlSql queryXmlSql, int page, int size,Integer pageType);

	/**
	 * 总条数自动生成sql
	 * 
	 * @param page  页码，从1开始
	 * @param size  查询条数
	 */
	Page<Map<String, Object>> findMapPageBySqlName(String sqlName, int page, int size);

	/**
	 * 总条数自动生成sql
	 *
	 * @param page  页码，从1开始
	 * @param size  查询条数
	 */
	Page<Map<String, Object>> findMapPageBySqlName(String sqlName, int page, int size,Integer pageType);

}
